package net.servir.capacidades.web.controller;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Censo;
import net.servir.capacidades.model.Etapa;
import net.servir.capacidades.model.FuncionLeyenda;
import net.servir.capacidades.model.Persona;
import net.servir.capacidades.model.Profesion;
import net.servir.capacidades.model.PuestoTipo;
import net.servir.capacidades.model.Regimen;
import net.servir.capacidades.model.Responsable;
import net.servir.capacidades.model.ResponsableIdentificacion;
import net.servir.capacidades.model.SegPerfil;
import net.servir.capacidades.model.ServicioCivil;
import net.servir.capacidades.model.Test;
import net.servir.capacidades.model.TipoDocumento;
import net.servir.capacidades.model.TipoObservacion;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.jsp.JspUsuarioEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.MantenimientoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class UsuarioEdicionController {

	@Autowired
	private CapacidadesService capacidadesService ;

	@Autowired
	private MantenimientoService mantenimientoService ;
	
	//	@Autowired
//	private CensoService censoService ;
	
	@RequestMapping("/usuarioEdicion.htm")
	public @ModelAttribute("usuarioEdicion")
	JspUsuarioEdicion jspUsuarioEdicion(HttpServletRequest request,HttpServletResponse response) {
		
		//************************************************************
		// se obtiene el dni de la session activa
		//************************************************************
		HttpSession session = request.getSession();
		String cod_session =session.getId();

		String dniUsuario = null;
		if(session.getAttribute("dni") != null)			
			dniUsuario = session.getAttribute("dni").toString();
		
		//Obtenemos los datos del responsable
		Usuario verresponsable = capacidadesService.GetUsuarioIdentificacion(dniUsuario);
		
		if (verresponsable == null)
			return null;
		//************************************************************
		
		Censo censo = new Censo();
		censo.setCod_session(cod_session);
		session.setAttribute("finalizar", "0");
		
		JspUsuarioEdicion obj = new JspUsuarioEdicion();
		String mensaje="";
		String nombres="";		
		String apellidoPaterno="";
		String apellidoMaterno="";
		String clave = "";
		String dni="";
		String correo="";		
		String accion="";
		//String formEdicion="";
		String tipoEdicion="";
		String codUsuario = "";
		String estado = "0";
		Integer idPerfil = null;
		
		if (request.getParameter("idPerfil") != null &&
				!request.getParameter("idPerfil").toString().equals(""))
			idPerfil = Integer.parseInt(request.getParameter("idPerfil"));

		if (request.getParameter("accion") != null &&
				!request.getParameter("accion").toString().equals(""))
			accion  = request.getParameter("accion").toString();

		if (request.getParameter("tipo_edicion") != null &&
				!request.getParameter("tipo_edicion").toString().equals(""))
			tipoEdicion  = request.getParameter("tipo_edicion").toString();

		if (request.getParameter("dni") != null &&
				!request.getParameter("dni").toString().equals(""))
			codUsuario  = request.getParameter("dni").toString();
		
		if (request.getParameter("estado") != null &&
				!request.getParameter("estado").toString().equals(""))
			estado = request.getParameter("estado");


		Usuario usuario = new Usuario();
		Persona persona = new Persona();
		
		if (!codUsuario.equals("") && !tipoEdicion.equals("NEW"))
		{			
			usuario = mantenimientoService.obtenerUsuario(codUsuario);
			persona = mantenimientoService.getPersona(codUsuario);
			idPerfil = usuario.getId_perfil();
			obj.setTipo_edicion("EDITAR");
		}
		else
		{
			obj.setTipo_edicion("NEW");
		}		

		nombres = request.getParameter("nombre");
		if(nombres != null)
			nombres= nombres.toUpperCase();
			
		apellidoPaterno = request.getParameter("apellido_paterno");
		if(apellidoPaterno != null)
			apellidoPaterno= apellidoPaterno.toUpperCase();

		clave = request.getParameter("clave");

		apellidoMaterno = request.getParameter("apellido_materno");		
		if(apellidoMaterno != null)
			apellidoMaterno= apellidoMaterno.toUpperCase();

		correo = request.getParameter("correo");		
		if(correo != null)
			correo = correo.trim().toUpperCase();
		
		dni = request.getParameter("dni");		
		correo= request.getParameter("correo");		
		if (request.getParameter("idPerfil") != null && !request.getParameter("idPerfil").trim().equals(""))
			idPerfil = Integer.parseInt(request.getParameter("idPerfil"));			
		obj.setId_perfil(idPerfil);
		obj.setPersona(persona);
		obj.setUsuario(usuario);
		if ( accion != null && !accion.equals("") )			
		{
			//Actualizamos el objeto con los valores del formulario
			persona.setNombres(nombres.trim());
			persona.setApellido_paterno(apellidoPaterno.trim());
			persona.setApellido_materno(apellidoMaterno.trim());
			persona.setDni(dni.trim());
			usuario.setDni(dni.trim());
			usuario.setEstado(estado);
			usuario.setCorreo(correo);
			usuario.setClave(clave);
			usuario.setId_perfil(idPerfil);
			obj.setId_perfil(idPerfil);
			if (accion != null && !accion.equals("REFRESH")) {
				Boolean validoEdicion = false;
				//Validamos los datos
				String flagDNI = capacidadesService.verificarExisteDNI(dni);
				if (!flagDNI.equals(""))
				{		
					mensaje = "No se completo el grabado, ya se encuentra registrada una persona con el mismo 'Nro. de Documento'. Por favor verifique los datos ingresados.";
					obj.setMensaje_usuario(mensaje);
					if (tipoEdicion.equals("EDITAR"))
						validoEdicion = true;					
				}
				else
				{
					if (tipoEdicion.equals("NEW"))
						validoEdicion = true;
				}
				if (tipoEdicion.equals("NEW") & validoEdicion & !accion.equals("BORRAR_PERFIL")) {	
					persona.setId_persona(1);
					// el estado no debe variar respecto al primero
					mensaje = capacidadesService.agregarUsuario(obj);
					obj.setTipo_edicion("EDITAR");
				} 
				else if (tipoEdicion.equals("EDITAR") & validoEdicion & !accion.equals("BORRAR_PERFIL")) {
					mensaje = capacidadesService.agregarUsuario(obj);
					obj.setTipo_edicion("EDITAR");
				}

				if (accion.equals("BORRAR_PERFIL"))
				{				
					if (request.getParameter("idPerfil")!= null && !request.getParameter("idPerfil").equals(""))
					{
						idPerfil  = Integer.parseInt(request.getParameter("idPerfil"));
						mensaje=  mantenimientoService.validarEliminarPerfil(idPerfil);
						if (mensaje.equals(""))
						{
							mantenimientoService.eliminarPerfil(idPerfil);
							mensaje= "Perfil eliminado correctamente";
						}
					}
				}
			}
		}	

		LinkedList<SegPerfil> segPerfiles = capacidadesService.obtenerPerfiles();
		obj.setSegPerfiles(segPerfiles);
		
		if (usuario.getCorreo() != null)
			usuario.setCorreo(usuario.getCorreo().toLowerCase());
		obj.setMensaje_usuario(mensaje);
		return obj;
	}
}
